package com.intelligence.tio.common.intf;

import com.intelligence.tio.common.JsonPacket;
import com.intelligence.tio.common.TioSessionContext;
import com.intelligence.tio.common.packages.BaseBody;
import com.intelligence.tio.common.packages.DataErrorReqBody;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tio.core.ChannelContext;
import org.tio.json.Json;

/**
 * 
* @Title: AbsTioBsHandler.java 
* @Package com.intelligence.tio.common.intf 
* @Description: Tio消息抽象处理类
* @Company: 南京因坦利软件有限公司
* @author 郭浩柱  
* @date 2017年5月18日 上午11:41:20 
* @version V1.0
 */
public abstract class AbsTioBsHandler<T extends BaseBody> implements TioBsHandlerIntf
{
	private static Logger log = LoggerFactory.getLogger(AbsTioBsHandler.class);

	public AbsTioBsHandler()
	{
	}

	/**
	* @Title: bodyClass 
	* @Description: 泛型抽象对象用于处理不同的JSON消息对象
	* @param @return    设定文件 
	* @return Class<T>    返回类型 
	* @throws
	 */
	public abstract Class<T> bodyClass();

	public abstract Object handler(JsonPacket packet, T bsBody, ChannelContext<TioSessionContext, JsonPacket, Object> channelContext) throws Exception;

	@Override
	public Object handler(JsonPacket packet, ChannelContext<TioSessionContext, JsonPacket, Object> channelContext) throws Exception
	{
		T bsBody = null;
		try {
			String jsonStr = null;
			
			if (packet.getBody() != null)
			{
				jsonStr = new String(packet.getBody(), JsonPacket.CHARSET);
				log.debug("接受到消息："+jsonStr);
				//将JSON消息字符串转成对象的消息对象
				bsBody = Json.toBean(jsonStr, bodyClass());
			}

			return handler(packet, bsBody, channelContext);
		} catch (Exception e) {
			//数据发送异常
			return handler(packet, bsBody, channelContext);
		}
	}

}
